<?php

defined('SYSPATH') or die('No direct access allowed.');

class Controller_Login extends Controller_Template {

    public $template = 'login_template';

    public function action_index() {
        if (Auth::instance()->logged_in('admin')) {
            $this->request->redirect('admin');
        }
        if (Auth::instance()->logged_in()) {
            // Если юзер залогинен отправляем его в личный кабинет
            $this->request->redirect('member');
        } else {
            // А если он не залогинен, отправляем логиниться
            $this->template->title = "Авторизация";
            $this->template->content = View::factory('login');
        }
    }

    // Регистрация пользователей
    public function action_register() {
        if (Auth::instance()->logged_in('admin')) {
            $this->template = View::factory('admin_template');
            // Если есть данные, присланные методом POST
            if ($_POST) {
                $post = Validation::factory($_POST);
                $post->rule('username', 'not_empty');
                if ($post->check()) {
                    // Создаем переменную, отвечающую за связь с моделью данных User
                    $model = ORM::factory('user');
                    // Вносим в эту переменную значения, переданные из POST
                    $model->values(array(
                        'username' => $_POST['username'],
                        'email' => "temp@mail.ru",
                        'password' => "1234",
                    ));
                    try {
                        // Пытаемся сохранить пользователя (то есть, добавить в базу)
                        $model->save();
                        $id_user = $model->pk();
                        $model_projects = ORM::factory('project')->where("domain", "=", $_POST['username'])->find();
                        if ($model_projects->loaded()) {
                            $model_projects->user_id = $id_user;
                            $model_projects->update();
                        }
                        // Назначаем ему роли
                        $model->add('roles', ORM::factory('role')->where('name', '=', 'login')->find());
                        // И отправляем его на страницу пользователя
                        $this->request->redirect('admin');
                    } catch (ORM_Validation_Exception $e) {
                        // Это если возникли какие-то ошибки
                        echo $e;
                    }
                } else {
                    $data['errors'] = $post->errors('models/user');
                    $this->template->title = "Регистрация";
                    $this->template->content = View::factory('register', $data);
                }
            } else {
                $this->template->title = "Регистрация";
                $this->template->content = View::factory('register');
            }
        } else {
            $this->template->content = "Вы не имеете доступ к этой странице";
        }
    }

    // Метод разлогивания
    public function action_logout() {
        // Пытаемся разлогиниться
        if (Auth::instance()->logout()) {
            // Если получается, то предлагаем снова залогиниться
            return $this->request->redirect('login');
        }
    }

    // Метод логина
    public function action_login() {
        $data = array();
        // Проверям, вдруг пользователь уже зашел
        if (Auth::instance()->logged_in('admin')) {
            return $this->request->redirect('admin');
        }
        if (Auth::instance()->logged_in()) {
            // И если это так, то отправляем его сразу на страницу пользователей
            return $this->request->redirect('member');
        }

        // Если же пользователь не зашел, но данные на страницу пришли, то:
        if ($_POST) {
            // Создаем переменную, отвечающую за связь с моделью данных User
            $user = ORM::factory('user');
            // в $status помещаем результат функции login
            $status = Auth::instance()->login($_POST['username'], $_POST['password']);
            // Если логин успешен, то
            if ($status) {
                if (Auth::instance()->get_user()->username == 'admin') {
                    $this->request->redirect('admin');
                }
                // Отправляем пользователя на его страницу
                $this->request->redirect('member');
            } else {
                // Иначе ничего не получилось, пишем error
                $data['error'] = "";
            }
        }
        // Грузим view логина
        $this->template->title = "Авторизация";
        $this->template->content = View::factory('login', $data);
    }

    public function action_repass() {
        if (Auth::instance()->logged_in()) {
            return $this->request->redirect('member');
        }
        $email = Arr::get($_POST, 'email', false);
        if (!$email) {
            $code = $this->request->param('id');
            if ($code) {
                $user_id = ORM::factory('user', array('code' => $code))->id;
                $email = ORM::factory('user', array('code' => $code))->email;
                $model_repass = new Model_Repass();
                $pass = $model_repass->generate_new_pass();
                $model_repass->save_new_pass($user_id, $pass);
                $model_repass->send_new_pass($email, $pass);
                $this->template->title = "Восстановление пароля";
                $this->template->content = "Вам выслан новый пароль";
            } else {
                $this->template->title = "Восстановление пароля";
                $this->template->content = View::factory('repass');
            }
        } else {
            $user = ORM::factory('user')->where("email", "=", $email)->find();
            if (!$user->loaded()) {
                $data['error'] = "";
                $this->template->content = View::factory('repass', $data);
            } else {
                $user_id = $user->id;
                $model_repass = new Model_Repass();
                $model_repass->send_code($email);
                $data['ok'] = 'Вам на почту ' . $email . ' выслан код';
                $this->template->title = "Восстановление пароля";
                $this->template->content = View::factory('repass', $data);
            }
        }
    }

}